Moduł:Lang
local lang = {} local data = mw.loadData( 'Module:lang/data' ) function lang.majorCode(longLanguageCode) local codepos = mw.ustring.find(longLanguageCode, "_-") if codepos then return mw.ustring.sub(longLanguageCode, 1, codepos-1) else return longLanguageCode end end function lang.istnieje(frame) local languageCode = frame.args1 if datalang.majorCode(languageCode) then return languageCode else return nil end end function lang.kursywa(frame) local languageCode = frame.args1 if languageCode then local languageData = datalang.majorCode(languageCode) if languageData and (languageData.kursywa false) then return "" end end return "" end lang"hasło" = function(frame) local languageCode = frame.args1 assert(languageCode, "Brak kodu języka") local languageData = datalang.majorCode(languageCode) assert(languageData, "Nieznany kod języka") return languageData'hasło' end lang"skrót" = function(frame) local languageCode = frame.args1 assert(languageCode, "Brak kodu języka") local languageData = datalang.majorCode(languageCode) assert(languageData, "Nieznany kod języka") return languageData'skrót' or languageData'mianownik' end function lang.mianownik(frame) local languageCode = frame.args1 assert(languageCode, "Brak kodu języka") local languageData = datalang.majorCode(languageCode) assert(languageData, "Nieznany kod języka") return languageData'mianownik' end lang"dopełniacz" = function(frame) local languageCode = frame.args1 assert(languageCode, "Brak kodu języka") local languageData = datalang.majorCode(languageCode) assert(languageData, "Nieznany kod języka") return languageData'dopełniacz' end function lang.miejscownik(frame) local languageCode = frame.args1 assert(languageCode, "Brak kodu języka") local languageData = datalang.majorCode(languageCode) assert(languageData, "Nieznany kod języka") return languageData'miejscownik' end function list(frame, multi) -- konwersja kodów języków na kod wiki text opisujący kody local items = {} -- tabela na skonwertowane kody local invalid = false -- flaga informująca, że na liście znajduje się nieznany kod języka local warning = false -- flaga informująca, że na liście znajduje się kod języka z listy częstych błędów local locallang = mw.getContentLanguage() -- język wiki local args = frame.args; if not args1 then -- brak argumentów sugeruje wywołanie z szablonu local parent = frame:getParent() if parent then args = parent.args end end if not args1 then return "'Błąd! Brak kodu języka." end local formatItem = function(languageCode) assert(#languageCode > 0, "Pusty kod języka") local languageData = datalanguageCode if languageData then if string.match("ee|am|an|ang|kr|se|si", languageCode) then warning = true end local skrot = languageData'skrót' or languageData'mianownik' local nativeName = mw.language.fetchLanguageName(languageCode) if nativeName and #nativeName > 0 and languageCode ~= "pl" then table.insert(items, string.format("%s", languageData'hasło', languageData'miejscownik', nativeName, skrot)) else table.insert(items, string.format("%s", languageData'hasło', languageData'miejscownik', skrot)) end elseif #languageCode 0 then if #items 0 then -- pierwszy kod nie może być pusty, reszta może, bo jest przekazywana jako pusta w szablonach cytowania invalid = true table.insert(items, "'''Błąd! Brak kodu języka.") end else invalid = true table.insert(items, string.format("Błąd! Nieznany kod języka: %s. Sprawdź listę kodów.", languageCode)) end end if args2 or multi then -- wiele argumentów sugeruje przekazywnie każdego kodu języka w oddzielnych argumentach for i, v in ipairs(args) do if #v > 0 then formatItem(lang.majorCode(locallang:lc(v))) end end else -- jeden argument pozwala także wysłać wszystkie kody oddzielone spacją for languageCode in string.gmatch(locallang:lc(args1), "%S+") do if lang.majorCode(languageCode) ~= locallang:getCode() then formatItem(lang.majorCode(languageCode)) else -- nie chcemy samotnego (pol.) return "" end end end if #items 0 then -- pusta lista kodów invalid = true table.insert(items, "Błąd! Brak kodu języka.") end -- ostateczne formatowanie wyniku local result = {} table.insert(result, "(") table.insert(result, table.concat(items, " • ")) table.insert(result, ")") if mw.title.getCurrentTitle().namespace 0 then if warning then table.insert(result, "Kategoria:Częste błędy kodu w szablonie lang") end if invalid then table.insert(result, "Kategoria:Nierozpoznany kod języka w szablonie lang") end end return table.concat(result, "") end function lang.lang(frame) return list(frame, true) end lang"język" = function(frame) return list(frame, false) end return lang